home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
101-125
/
scopedisk109
/
ms-dos
/
src
/
support.c
< prev
Wrap
C/C++ Source or Header
|
1995-03-19
|
4KB
|
200 lines
/*-
* $Id: support.c,v 1.2 90/02/03 17:01:19 Rhialto Exp $
* $Log: support.c,v $
* Revision 1.2 90/02/03 17:01:19 Rhialto
* Add error checking in dosalloc()
*
* Revision 1.1 89/12/17 19:57:50 Rhialto
* Initial revision
*
-*/
#include "dos.h"
extern PORT *DosPort; /* Our DOS port... */
typedef unsigned long ulong;
typedef unsigned char ubyte;
/*
* PACKET ROUTINES. Dos Packets are in a rather strange format as you
* can see by this and how the PACKET structure is extracted in the
* GetMsg() of the main routine.
*/
void
returnpacket(packet)
register struct DosPacket *packet;
{
register struct Message *mess;
register struct MsgPort *replyport;
replyport = packet->dp_Port;
mess = packet->dp_Link;
packet->dp_Port = DosPort;
mess->mn_Node.ln_Name = (char *) packet;
mess->mn_Node.ln_Succ = NULL;
mess->mn_Node.ln_Pred = NULL;
PutMsg(replyport, mess);
}
/*
* Are there any packets queued to our device?
*/
int
packetsqueued()
{
return ((void *) DosPort->mp_MsgList.lh_Head !=
(void *) &DosPort->mp_MsgList.lh_Tail); /* & inserted by OIS */
}
/*
* DOS MEMORY ROUTINES
*/
void *
dosalloc(bytes)
register ulong bytes;
{
register ulong *ptr;
bytes += sizeof (*ptr);
if (ptr = AllocMem(bytes, MEMF_PUBLIC | MEMF_CLEAR)) {
*ptr = bytes;
return (ptr + 1);
}
return NULL;
}
dosfree(ptr)
register ulong *ptr;
{
--ptr;
FreeMem(ptr, *ptr);
}
/*
* Convert a BSTR into a normal string.. copying the string into buf. I
* use normal strings for internal storage, and convert back and forth
* when required.
*/
void
btos(bstr, buf)
ubyte *bstr;
ubyte *buf;
{
bstr = BTOC(bstr);
bmov(bstr + 1, buf, *bstr);
buf[*bstr] = 0;
}
/*
* Some EXEC list handling routines not found in the EXEC library.
*/
#ifdef notdef
void *
NextNode(node)
register NODE *node;
{
node = node->mln_Succ;
if (node->mln_Succ == NULL)
return (NULL);
return (node);
}
#endif
void *
GetHead(list)
register LIST *list;
{
if ((void *) list->mlh_Head != (void *) &list->mlh_Tail)
return (list->mlh_Head);
return (NULL);
}
void *
GetTail(list)
register LIST *list;
{
if ((void *) list->mlh_Head != (void *) &list->mlh_Tail)
return (list->mlh_TailPred);
return (NULL);
}
#ifdef DEBUG
char *
typetostr(ty)
long ty;
{
switch (ty) {
case ACTION_DIE:
return ("DIE");
case ACTION_CURRENT_VOLUME:
return ("CURRENT VOLUME");
case ACTION_OPENRW:
return ("OPEN-RW");
case ACTION_OPENOLD:
return ("OPEN-OLD");
case ACTION_OPENNEW:
return ("OPEN-NEW");
case ACTION_READ:
return ("READ");
case ACTION_WRITE:
return ("WRITE");
case ACTION_CLOSE:
return ("CLOSE");
case ACTION_SEEK:
return ("SEEK");
case ACTION_EXAMINE_NEXT:
return ("EXAMINE NEXT");
case ACTION_EXAMINE_OBJECT:
return ("EXAMINE OBJ");
case ACTION_INFO:
return ("INFO");
case ACTION_DISK_INFO:
return ("DISK INFO");
case ACTION_PARENT:
return ("PARENTDIR");
case ACTION_DELETE_OBJECT:
return ("DELETE");
case ACTION_CREATE_DIR:
return ("CREATEDIR");
case ACTION_LOCATE_OBJECT:
return ("LOCK");
case ACTION_COPY_DIR:
return ("DUPLOCK");
case ACTION_FREE_LOCK:
return ("FREELOCK");
case ACTION_SET_PROTECT:
return ("SETPROTECT");
case ACTION_SET_COMMENT:
return ("SETCOMMENT");
case ACTION_RENAME_OBJECT:
return ("RENAME");
case ACTION_INHIBIT:
return ("INHIBIT");
case ACTION_RENAME_DISK:
return ("RENAME DISK");
case ACTION_MORECACHE:
return ("MORE CACHE");
case ACTION_WAIT_CHAR:
return ("WAIT FOR CHAR");
case ACTION_FLUSH:
return ("FLUSH");
case ACTION_RAWMODE:
return ("RAWMODE");
case ACTION_SET_DATE:
return ("SET_DATE");
default:
return ("---------UNKNOWN-------");
}
}
#endif /* DEBUG */